<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

    <script>

        // function outFunction(){
        //     console.log('我是' + outFunction.name)
        //     return function innerFcuntion(){
        //         console.log('我是' + innerFcuntion.name)
        //     }
        // }

        // outFunction();

        // function factorial(num) {
        //     if (num <= 1) {
        //         return 1;
        //     } else {
        //         // return num * factorial(num - 1);
        //         return num * arguments.callee(num - 1);
        //     }
        // }

        // console.log(factorial(10));

        // window.color = "red";
        // var o = {color: "blue"};

        // function sayColor() {
        //     console.log(this.color);
        // }

        // sayColor(); // red

        // o.sayColor = sayColor;
        // o.sayColor();  // blue

        // function outer(){
        //     inner();
        // }

        // function inner(){
        //     // console.log(inner.caller);
        //     // console.log(arguments.callee.caller);
        //     // "use strict"
        //     console.log(arguments.callee);
        // }

        // // outer();
        // inner();

        // console.log(inner.prototype)

        // function a(){
        //     // "use strict"
        //     console.log(this);
        //     console.log(this.abc);
        // }

        // a.apply(undefined)

        // var str = new String('str');

        // var strr = 'sadf';
        // console.log(strr.toString())
        // console.log(str.toString())

        // console.log(Object.prototype.toString.call(str))

        // window.color = 'red';
        // var o = {color: 'blue'};

        // function sayColor() {
        //     console.log(this);
        // }

        // var outerSayColor = sayColor.bind(o);

        // outerSayColor();

        // var s1 = 'some text';
        // s1.color = 'red';

        // console.log(s1.color);  // undefined

        // var str = new Object('str');
        // var num = new Object(123);

        // console.log(str, num)

        var name = 'the window';

        var abc = 1234;

        var obj = {
            name: 'my object',
            getName: function(){
                console.log(this, abc);
                return this.name;
            }
        };

        (obj.getName())
        console.log(obj.getName);

        ;(obj.getName = obj.getName)();
    
    </script>
    
</body>
</html>